package collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 数组转换为集合
 * 数组的工具类：Arrays的静态方法asList
 * 数组不能转换成collection和set，因为有重复
 */
public class ArrayToListDemo {
    public static void main(String[] args) {
        String[] array={"one","two","three","four","five"};
        System.out.println("array:"+ Arrays.toString(array));

        //我们用List<String>类型的去接收Arrays.asList()的结果
        List<String> list = Arrays.asList(array);
        System.out.println("list:"+list);

        /**
         * 对数组转换而来的集合的元素进行操作，就等于是对原数组进行了操作
         */
        list.set(2,"six");
        System.out.println("list:"+list);
        System.out.println("array:"+Arrays.toString(array));//这两个结果一样

        /**
         * 由于数组是定长的，因此对集合的操作只要是改变元素个数的，都不支持，运行错误！
           UnsupportedOperationException
         */
        //list.add("seven");//结果报错，不能对数组转换而来的集合进行增删操作！！！
        //list.remove("one");//结果报错，不能对数组转换而来的集合进行增删操作！！！

        /**
         * 如果我们想对由数组转换而来的集合，Collection给了一个方法
           所有的集合都支持一个参数为Collection类型的构造器
           作用是在创建当前集合的同时包含给定集合中的所有元素
         */
        List<String> list2 = new ArrayList<>(list);//用这个构造器，list直接放进去
        //将(list)集合的元素包含进来了，而且是个新集合，可以对其进行增删操作
        System.out.println("list2:"+list2);
        list2.add("seven");
        System.out.println("list2:"+list2);
    }
}
